# -*- coding: utf8 -*-

aceitacao = {}
aceitacao['expressao'] = [2, 15]
aceitacao['comando'] = [2]
aceitacao['programa'] = [31]

#maquina de estados geral
maquina = {}
'''
maquina[('expressao', 1,'(')] = 3
maquina[('expressao', 1,'Inteiro')] = 2
maquina[('expressao', 1, 'identificador')] = 2
maquina[('expressao', 2,'(')] = 5
maquina[('expressao', 2, '/')] = 7
maquina[('expressao', 2, '*')] = 7
maquina[('expressao', 3, 'expressao')] = 4
maquina[('expressao', 4, ')')] = 2
maquina[('expressao', 5, ')')] = 2
maquina[('expressao', 5, 'expressao')] = 5
maquina[('expressao', 5, ',')] = 6
maquina[('expressao', 6, 'expressao')] = 5
maquina[('expressao', 7,'(')] = 9
maquina[('expressao', 7,'Inteiro')] = 8
maquina[('expressao', 7, 'identificador')] = 8
maquina[('expressao', 8,'(')] = 11
maquina[('expressao', 8,')')] = 20
maquina[('expressao', 8, '+')] = 13
maquina[('expressao', 8, '-')] = 13
maquina[('expressao', 8, '/')] = 19
maquina[('expressao', 8, '*')] = 19
maquina[('expressao', 9, 'expressao')] = 10
maquina[('expressao', 10,')')] = 8
maquina[('expressao', 11,')')] = 8
maquina[('expressao', 11, 'expressao')] = 11
maquina[('expressao', 11, ',')] = 12
maquina[('expressao', 12, 'expressao')] = 11
maquina[('expressao', 13,'(')] = 15
maquina[('expressao', 13,'Inteiro')] = 14
maquina[('expressao', 13, 'identificador')] = 14
maquina[('expressao', 14, '(')] = 17
maquina[('expressao', 15, 'expressao')] = 16
maquina[('expressao', 16, ')')] = 14
maquina[('expressao', 17, ')')] = 8
maquina[('expressao', 17, 'expressao')] = 17
maquina[('expressao', 17, ',')] = 18
maquina[('expressao', 18, 'expressao')] = 17
maquina[('expressao', 19, '(')] = 21
maquina[('expressao', 19,'Inteiro')] = 8
maquina[('expressao', 19, 'identificador')] = 8
maquina[('expressao', 20, ')')] = 8
maquina[('expressao', 20, 'expressao')] = 20
maquina[('expressao', 21, 'expressao')] = 22
maquina[('expressao', 22, ')')] = 8
maquina[('expressao', 23, 'expressao')] = 20
'''

maquina[('expressao', 1,'(')] = 3
maquina[('expressao', 1,'Inteiro')] = 2
maquina[('expressao', 1, 'identificador')] = 2
maquina[('expressao', 1, 'chamada-funcao')] = 2
maquina[('expressao', 2,'+')] = 11
maquina[('expressao', 2,'-')] = 11
maquina[('expressao', 2, '*')] = 6
maquina[('expressao', 2, '/')] = 6

maquina[('expressao', 3, 'expressao')] = 4

maquina[('expressao', 4, ')')] = 2

maquina[('expressao', 6, '(')] = 8
maquina[('expressao', 6, 'Inteiro')] = 2
maquina[('expressao', 6, 'identificador')] = 2
maquina[('expressao', 6, 'chamada-funcao')] = 2

maquina[('expressao', 8, 'expressao')] = 9

maquina[('expressao', 9, ')')] = 2

maquina[('expressao', 11, '(')] = 13
maquina[('expressao', 11,'Inteiro')] = 15
maquina[('expressao', 11, 'identificador')] = 15
maquina[('expressao', 11, 'chamada-funcao')] = 15

maquina[('expressao', 13, 'expressao')] = 14

maquina[('expressao', 14, ')')] = 15

maquina[('expressao', 15,'+')] = 11
maquina[('expressao', 15,'-')] = 11
maquina[('expressao', 15, '*')] = 16
maquina[('expressao', 15, '/')] = 16

maquina[('expressao', 16, '(')] = 18
maquina[('expressao', 16, 'Inteiro')] = 2
maquina[('expressao', 16, 'identificador')] = 2
maquina[('expressao', 16, 'chamada-funcao')] = 2

maquina[('expressao', 18, 'expressao')] = 19

maquina[('expressao', 19, ')')] = 2


maquina[('chamada-funcao', 1, 'identificador')] = 2
maquina[('chamada-funcao', 2, '(')] = 3
maquina[('chamada-funcao', 3, ')')] = 5
maquina[('chamada-funcao', 3, 'expressao')] = 3
maquina[('chamada-funcao', 3, ',')] = 4
maquina[('chamada-funcao', 4, 'expressao')] = 3

# maquina de estados de comandos
maquina[('comando', 2,'identificador')] = 3
maquina[('comando', 2,'if')] = 6
maquina[('comando', 2,'while')] = 16
maquina[('comando', 2,'while')] = 16
maquina[('comando', 2,'input')] = 22
maquina[('comando', 2,'output')] = 26
maquina[('comando', 3,'=')] = 4
maquina[('comando', 4,'expressao')] = 5
maquina[('comando', 5,';')] = 2
maquina[('comando', 6,'(')] = 7
maquina[('comando', 7,'expressao')] = 34
maquina[('comando', 8,')')] = 9
maquina[('comando', 9,'{')] = 10
maquina[('comando', 10,'sequencia-comandos')] = 11
maquina[('comando', 11,'}')] = 12
maquina[('comando', 12,'identificador')] = 3
maquina[('comando', 12,'if')] = 6
maquina[('comando', 12,'while')] = 16
maquina[('comando', 12,'input')] = 22
maquina[('comando', 12,'output')] = 26
maquina[('comando', 12,'else')] = 13
maquina[('comando', 13,'{')] = 14
maquina[('comando', 14,'sequencia-comandos')] = 15
maquina[('comando', 15,'}')] = 2
maquina[('comando', 16,'(')] = 17
maquina[('comando', 17,'expressao')] = 36
maquina[('comando', 18,')')] = 19
maquina[('comando', 19,'{')] = 20
maquina[('comando', 20,'sequencia-comandos')] = 21
maquina[('comando', 21,'}')] = 2
maquina[('comando', 22,'identificador')] = 23
maquina[('comando', 23,',')] = 25
maquina[('comando', 23,';')] = 2
maquina[('comando', 25,'identificador')] = 25
maquina[('comando', 26,'identificador')] = 27
maquina[('comando', 27,',')] = 29
maquina[('comando', 27,';')] = 2
maquina[('comando', 29,'identificador')] = 27
maquina[('comando', 30,'expressao')] = 31
maquina[('comando', 31,',')] = 33
maquina[('comando', 31,')')] = 38
maquina[('comando', 33,'expressao')] = 31
maquina[('comando', 34,'==')] = 35
maquina[('comando', 34,'>')] = 35
maquina[('comando', 34,'<')] = 35
maquina[('comando', 34,'>=')] = 35
maquina[('comando', 34,'<=')] = 35
maquina[('comando', 35,'expressao')] = 8
maquina[('comando', 36,'==')] = 37
maquina[('comando', 36,'>')] = 37
maquina[('comando', 36,'<')] = 37
maquina[('comando', 36,'>=')] = 37
maquina[('comando', 36,'<=')] = 37
maquina[('comando', 37,'expressao')] = 18
maquina[('comando', 38,';')] = 2
maquina[('comando', 35,'expressao')] = 8

# máquina de estados de programa
maquina[('programa', 1 , 'program')] = 2
maquina[('programa', 2, '{')] = 3
maquina[('programa', 3, 'declare')] = 4
maquina[('programa', 3, 'sequencia-comandos')] = 32
maquina[('programa', 3, 'fuction')] = 14
maquina[('programa', 4, 'int')] = 6
maquina[('programa', 4, 'bool')] = 6
maquina[('programa', 4, ';')] = 12
maquina[('programa', 6, 'identificador')] = 7
maquina[('programa', 7, 'int')] = 6
maquina[('programa', 7, 'bool')] = 6
maquina[('programa', 7, ',')] = 9
maquina[('programa', 7, ';')] = 12
maquina[('programa', 9, 'int')] = 10
maquina[('programa', 9, 'bool')] = 10
maquina[('programa', 10, 'identificador')] = 11
maquina[('programa', 11, 'int')] = 6
maquina[('programa', 11, 'bool')] = 6
maquina[('programa', 11, ',')] = 9
maquina[('programa', 11, ';')] = 12
maquina[('programa', 12, 'sequencia-comandos')] = 32
maquina[('programa', 12, 'function')] = 14
maquina[('programa', 14, 'int')] = 15
maquina[('programa', 14, 'bool')] = 15
maquina[('programa', 15, 'identificador')] = 16
maquina[('programa', 16, '(')] = 17
maquina[('programa', 17, ')')] = 21
maquina[('programa', 17, 'int')] = 18
maquina[('programa', 17, 'bool')] = 18
maquina[('programa', 17, ',')] = 19
maquina[('programa', 18, 'identificador')] = 17
maquina[('programa', 19, 'int')] = 20
maquina[('programa', 19, 'bool')] = 20
maquina[('programa', 20, 'identificador')] = 17
maquina[('programa', 21, '{')] = 22
maquina[('programa', 22, 'declare')] = 24
maquina[('programa', 22, 'sequencia-comandos')] = 30
maquina[('programa', 23, 'sequencia-comandos')] = 30
maquina[('programa', 24, 'int')] = 26
maquina[('programa', 24, 'bool')] = 26
maquina[('programa', 24, ',')] = 28
maquina[('programa', 24, ';')] = 23
maquina[('programa', 25, 'int')] = 26
maquina[('programa', 25, 'bool')] = 26
maquina[('programa', 25, ',')] = 28
maquina[('programa', 25, ';')] = 23
maquina[('programa', 26, 'identificador')] = 27
maquina[('programa', 27, 'int')] = 26
maquina[('programa', 27, 'bool')] = 26
maquina[('programa', 27, ',')] = 28
maquina[('programa', 27, ';')] = 23
maquina[('programa', 28, 'int')] = 29
maquina[('programa', 28, 'bool')] = 29
maquina[('programa', 29, 'identificador')] = 25
maquina[('programa', 30, '}')] = 12
maquina[('programa', 30, 'return')] = 31
maquina[('programa', 31, 'identificador')] = 30
maquina[('programa', 32, '}')] = 33
